package com.idez.androiddelphi.utils;

import java.util.Properties;

import javax.annotation.PostConstruct;
import javax.ejb.Asynchronous;
import javax.ejb.Schedule;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.interceptor.Interceptors;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import com.idez.androiddelphi.model.Usuario;

@Singleton
@Startup
//@Interceptors({ LogInterceptor.class })
public class MailSenderEJB {

	private String userName = "idez.dam@gmail.com";
	private String password = "ninguempassa";

	private Properties prop = new Properties();

	private Session mailSession;

	@PostConstruct
	public void config() {
		prop.put("mail.smtp.host", "smtp.gmail.com");
		prop.put("mail.smtp.socketFactory.port", "465");
		prop.put("mail.smtp.socketFactory.class",
				"javax.net.ssl.SSLSocketFactory");
		prop.put("mail.smtp.auth", "true");
		prop.put("mail.smtp.port", "465");

		mailSession = Session.getInstance(prop, new Authenticator() {
			protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
				return new javax.mail.PasswordAuthentication(userName, password);

			}
		});

	}

	@Asynchronous
	public void enviarMsgCadastro(Usuario u) {
		try {
			String destinatario = u.getEmail();
			String text = "Prezado(a), " + u.getNome()
					+ ": seu cadastro foi realizado com sucesso!!"
					+ " [login]: " + u.getLogin() + " [senha]: " + u.getSenha();

			Message mensagem = new MimeMessage(mailSession);
			mensagem.setFrom(new InternetAddress("admin@taskcontrol.com"));
			mensagem.setRecipients(Message.RecipientType.TO,
					InternetAddress.parse(destinatario));
			mensagem.setSubject("Cadastro de Usuário - TaskControl");
			mensagem.setText(text);

			Transport.send(mensagem);

		} catch (MessagingException e) {
			// TODO: handle exception
			throw new RuntimeException(e);
		}
	}

	@Schedule(second = "1", minute = "11", hour = "20", dayOfWeek = "Tue", persistent = false)
	public void execute() {
		enviarAltereSenha("aliandro@gmail.com");
		System.out.println("[MailSenderEJB.execute] E-mail com timer enviado!");
	}

	@Asynchronous
	public void enviarAltereSenha(String destinatario) {
		try {

			Message mensagem = new MimeMessage(mailSession);
			mensagem.setFrom(new InternetAddress("admin@taskcontrol.com"));
			mensagem.setRecipients(Message.RecipientType.TO,
					InternetAddress.parse(destinatario));
			mensagem.setSubject("Altere Sua Senha - TaskControl");
			mensagem.setText("Altere sua senha.");

			Transport.send(mensagem);

		} catch (MessagingException e) {
			// TODO: handle exception
			throw new RuntimeException(e);
		}
	}

}
